package com.kaizeli.website.pojo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.kaizeli.website.pojo.base.BaseDO;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 开票单表
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("invoice")
public class Invoice extends BaseDO {

    /**
     * 主键ID
     */
    @TableId(type = IdType.NONE)
    private Integer id;

    /**
     * 开票单编号
     */
    private String invoiceNo;

    /**
     * 验收单ID
     */
    private Integer acceptanceId;

    /**
     * 项目ID（冗余字段）
     */
    private Long projectId;

    /**
     * 项目名称（冗余字段）
     */
    private String projectName;

    /**
     * 项目编号（冗余字段）
     */
    private String projectCode;

    /**
     * 子项目名称（冗余字段）
     */
    private String subProjectName;

    /**
     * 对接人（冗余字段）
     */
    private String contactPerson;

    /**
     * 客户（冗余字段）
     */
    private String client;

    /**
     * 部门（冗余字段）
     */
    private String department;

    /**
     * 科室（冗余字段）
     */
    private String section;

    /**
     * 合同号（冗余字段）
     */
    private String contractNo;

    /**
     * 开票日期
     */
    private LocalDate invoiceDate;

    /**
     * 开票金额
     */
    private BigDecimal invoiceAmount;

    /**
     * 发票类型
     */
    private String invoiceType;

    /**
     * 税率（%）
     */
    private BigDecimal taxRate;

    /**
     * 税额
     */
    private BigDecimal taxAmount;

    /**
     * 含税总金额
     */
    private BigDecimal totalAmount;

    /**
     * 开票状态
     */
    private String invoiceStatus;

    /**
     * 开票人ID
     */
    private Long invoicePersonId;

    /**
     * 开票人姓名
     */
    private String invoicePersonName;

    /**
     * 开票附件URL（多个用逗号分隔）
     */
    private String attachmentUrls;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
}
